M291 R"Z-Binding Test" P"Choose an option:" K{"Start","Skip","Cancel"} S4
if input == 1
    M99
elif input == 2
    abort "Error: Z - Binding test cancelled by user."

M564 H0
G91

if input == 0
    while true
        G1 Z50 F18000
        M291 R"Move Z-Axis Down" P"Choose an option:" K{"Move Down","Done","Cancel"} S4
        if input == 1
            break
        elif input == 2
            abort "Z - Binding test cancelled by user."
elif input == 1
    ; Proceed to next step
elif input == 2
    M99

G91
G1 Z-2 F600
G92 Z999

M913 Z75 ; Reduce Z-axis current

; Move Z-axis up and down five times
var iter = 0
while var.iter < 5
    G1 Z-20 F18000
    G1 Z20 F18000
    set var.iter = var.iter + 1

M913 Z100 ; Reset Z-axis current
G1 Z-25 F18000

M291 R"Was the motion smooth?" P"Choose an option:" K{"Yes","No"} S4

G90
if input == 0
    G1 Z50 F18000
elif input == 1
    M291 R"Perform Z - Motor alignment Required" P"Perform Z - Motor alignment Required" S1 T120
    abort "Error: Z - Motor binding reported."

M564 H1
G90